package com.ourchem.bus.service.impl;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import com.ourchem.bus.domain.SystemFile;
import com.ourchem.bus.domain.UploadResult;
import com.ourchem.bus.mapper.SysFileMapper;
import com.ourchem.bus.service.ISysFileService;
import com.ourchem.common.config.SmartFurnConfig;
import com.ourchem.common.constant.Constants;
import com.ourchem.common.exception.base.BaseException;
import com.ourchem.common.utils.DateUtils;
import com.ourchem.common.utils.StringUtils;
import com.ourchem.common.utils.file.FileUploadUtils;
import com.ourchem.common.utils.file.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 【请填写功能名称】Service业务层处理
 *
 * @author ourchem
 * @date 2021-09-10
 */
@Service
public class SysFileServiceImpl implements ISysFileService
{
    @Autowired
    private SysFileMapper sysFileMapper;

    /**
     * 查询【请填写功能名称】
     *
     * @param id 【请填写功能名称】主键
     * @return 【请填写功能名称】
     */
    @Override
    public SystemFile selectSysFileById(Long id)
    {
        return sysFileMapper.selectSysFileById(id);
    }

    /**
     * 查询【请填写功能名称】列表
     *
     * @param systemFile 【请填写功能名称】
     * @return 【请填写功能名称】
     */
    @Override
    public List<SystemFile> selectSysFileList(SystemFile systemFile)
    {
        return sysFileMapper.selectSysFileList(systemFile);
    }

    /**
     * 新增【请填写功能名称】
     *
     * @param systemFile 【请填写功能名称】
     * @return 结果
     */
    @Override
    public int insertSysFile(SystemFile systemFile)
    {
        systemFile.setCreateTime(DateUtils.getNowDate());
        return sysFileMapper.insertSysFile(systemFile);
    }

    /**
     * 修改【请填写功能名称】
     *
     * @param systemFile 【请填写功能名称】
     * @return 结果
     */
    @Override
    public int updateSysFile(SystemFile systemFile)
    {
        return sysFileMapper.updateSysFile(systemFile);
    }

    /**
     * 批量删除【请填写功能名称】
     *
     * @param ids 需要删除的【请填写功能名称】主键
     * @return 结果
     */
    @Override
    public int deleteSysFileByIds(Long[] ids)
    {
//        for(Long id:ids){
//            String filePath=sysFileMapper.selectSysFileById(id).getFilePath();
//            String localPath = SmartFurnConfig.getProfile();
//            // 数据删除地址
//            String deletePath = localPath + StringUtils.substringAfter(filePath, Constants.RESOURCE_PREFIX);
//            FileUtils.deleteFile(deletePath);
//        }
        return sysFileMapper.deleteSysFileByIds(ids);
    }

    /**
     * 删除【请填写功能名称】信息
     *
     * @param id 【请填写功能名称】主键
     * @return 结果
     */
    @Override
    public int deleteSysFileById(Long id)
    {
        return sysFileMapper.deleteSysFileById(id);
    }

    @Override
    public List<UploadResult> uploadFile(List<MultipartFile> list) throws IOException {
        List<UploadResult> results = new ArrayList<>();
        for(MultipartFile file:list){
            UploadResult uploadResult = new UploadResult();
            try{
                //上传文件返回文件存储路径
                SystemFile systemFile = new SystemFile();
                systemFile.setFileType(FileUploadUtils.getExtension(file));
                String filePathName = FileUploadUtils.upload(file);
                String originName = file.getOriginalFilename();
                long fileSize = file.getSize();

                systemFile.setFileName(originName);
                systemFile.setFileSize(fileSize);
                systemFile.setFilePath(filePathName);

                int flag = insertSysFile(systemFile);

                uploadResult.setFileId(systemFile.getId());
                uploadResult.setFileName(systemFile.getFileName());
                uploadResult.setSize(systemFile.getFileSize());
                uploadResult.setFilePath(filePathName);
//                uploadResult.setUserId(systemFile.getCreatorId());
                uploadResult.setUploadTime(systemFile.getCreateTime());
                uploadResult.setUsername(systemFile.getCreateBy());
                if(flag > 0){
                    uploadResult.setSuccess(true);
                }else{
                    uploadResult.setSuccess(false);
                }
                results.add(uploadResult);
            }catch (Exception e){
                e.printStackTrace();
                uploadResult.setMessage(e.getMessage());
                throw e;
            }
        }
        return results;
    }


    @Override
    public int selectID(String filename) {
        return sysFileMapper.selectID(filename);
    }

    @Override
    public void previewFile(long fileId, HttpServletRequest request, HttpServletResponse response) throws IOException {
        //根据文件id获取文件
        SystemFile reviewFile = sysFileMapper.selectSysFileById(fileId);
        String resource = reviewFile.getFilePath();
        // 数据库资源地址
        resource =  StringUtils.substringAfter(resource, "/smartFile");
        File file = new File(SmartFurnConfig.getProfile() + resource);
        if(!file.exists()){
            throw new BaseException("文件不存在");
        }
        FileUtils.writeBytes(file.getPath(), response.getOutputStream());
    }


}
